import java.io.IOException;
import java.util.*;

class P10138 {

  private static String newLine = System.getProperty("line.separator");

  static String readLn() {
    StringBuffer buffer = new StringBuffer();
    int car = -1;

    try {
      car = System.in.read();
      while ( (car > 0) && (car != newLine.charAt(0))) {
        buffer.append( (char) car);
        car = System.in.read();
      }
      if (car == newLine.charAt(0))
        System.in.skip(newLine.length() - 1);
    }
    catch (IOException e) {
      return (null);
    }

    if ( (car < 0) && (buffer.length() == 0))
      return (null); /* eof */
    return (buffer.toString());
  }

  public static void main(String[] args) {
    int numeroDeCasos = Integer.parseInt(readLn());
    readLn();
    computaCasos(numeroDeCasos);
  }

  private static void computaCasos(int numeroDeCasos) {
    for (int k = 0; k < numeroDeCasos; k++) {
      casoUnico();
      if (k + 1 != numeroDeCasos) System.out.println();
    }
  }

  private static int[] leTabelaDePrecos() {
    int[] tabelaDePrecos = new int[24];
    StringTokenizer precos = new StringTokenizer(readLn(), " ");
    for (int k = 0; k < 24; k++) {
      tabelaDePrecos[k] = Integer.parseInt(precos.nextToken());
    }
    return tabelaDePrecos;
  }

  private static void casoUnico() {
    int[] tabelaDePrecos = leTabelaDePrecos();
    Vector casos = new Vector();
    String linha = readLn();
    while (linha != null && !linha.equals("")) {
      casos.addElement(linha);
      linha = readLn();
    }
    ordena(casos);
    computaSaida(casos, tabelaDePrecos);
  }

  private static void computaSaida(Vector casos, int[] tabela) {
    while (casos.size() > 0) {
      String placa = leDado( (String) casos.elementAt(0)).placa;
      Vector casos1 = soDaPlaca(casos, placa);
      int conta = 0;
      while (casos1.size() > 0) {
        Dados dado1 = leDado( (String) casos1.elementAt(0));
        casos1.removeElementAt(0);
        if (dado1.entrada) {

          if (casos1.size() > 0) {
            Dados dado2 = leDado( (String) casos1.elementAt(0));
            while (casos1.size() > 0 &&
                   (dado1.data.compareTo(dado2.data) > 0) &&
                   dado2.entrada) {
              casos1.removeElementAt(0);
              if (casos1.size() > 0) {
                dado2 = leDado( (String) casos1.elementAt(0));
                casos1.removeElementAt(0);
              }
            }
            // aqui!
            if (!dado2.entrada &&
                dado1.data.compareTo(dado2.data) < 0) {
              conta += 100 +
                  (Math.abs(dado1.kilometro - dado2.kilometro) *
                   tabela[dado1.hora]);
            }
          }
        }
      }
      if (conta != 0) {
        conta += 200;
        String resposta = "";
        resposta += conta;
        char[] respostaChar = resposta.toCharArray();
        String respostaMesmo = "";
        for (int k = respostaChar.length - 1; k > -1; k--) {
          respostaMesmo = respostaChar[k] + respostaMesmo;
          if (k == respostaChar.length - 2)
            respostaMesmo = "." + respostaMesmo;
        }
        System.out.println(placa + " $"+ respostaMesmo);
      }
    }
  }

  private static Vector soDaPlaca(Vector casos, String placa) {
    Vector retorno = new Vector();
    int tamanho = casos.size();
    for (int k = 0; k < tamanho; k++) {
      String elemento = (String) casos.elementAt(k);
      Dados dado = leDado(elemento);
      if (dado.placa.equals(placa))
        retorno.addElement(elemento);
    }
    tamanho = retorno.size();
    for (int k = 0; k < tamanho; k++) {
      casos.removeElement(retorno.elementAt(k));
    }
    return retorno;
  }

  private static void ordena(Vector vector) {
    int length = vector.size();
    for (int k = 1; k < length; k++) {
      int daVez = k;
      int apontador = k - 1;
      int compareTo = ( (String) vector.elementAt(daVez)).compareTo( (String)
          vector.elementAt(apontador));
      while ( (apontador > -1) && (compareTo) < 0) {
        troca(vector, daVez, apontador);
        daVez--;
        apontador--;
        if (apontador > -1)
          compareTo = ( (String) vector.elementAt(daVez)).compareTo( (String)
              vector.elementAt(apontador));
      }
    }
  }

  private static void troca(Vector vector, int posicao1, int posicao2) {
    Object aux1 = vector.elementAt(posicao1);
    Object aux2 = vector.elementAt(posicao2);
    vector.setElementAt(aux2, posicao1);
    vector.setElementAt(aux1, posicao2);
  }

  private static Dados leDado(String linha) {
    Dados dado = new Dados();
    StringTokenizer linhaQuebrada = new StringTokenizer(linha, " ");
    dado.placa = linhaQuebrada.nextToken();
    dado.data = linhaQuebrada.nextToken();
    StringTokenizer horario = new StringTokenizer(dado.data, ":");
    horario.nextToken();
    horario.nextToken();
    dado.hora = Integer.parseInt(horario.nextToken());
    dado.minuto = Integer.parseInt(horario.nextToken());
    dado.entrada = "enter".equals(linhaQuebrada.nextToken());
    dado.kilometro = Integer.parseInt(linhaQuebrada.nextToken());
    return dado;
  }

}

class Dados {

  boolean entrada;
  String placa;
  String data;
  int hora;
  int minuto;
  int kilometro;

}
